import { getOrders, cancelOrder, deleteOrder } from '../../api/order';
import { getPaymentParams } from '../../api/order';
import { formatDate } from '../../utils/date';

Page({
  /**
   * 页面的初始数据
   */
  data: {
    currentTab: -1, // 当前选中的标签索引，-1表示全部
    page: 1,        // 当前页码
    pageSize: 10,   // 每页数量
    orders: [],     // 订单列表
    loading: false, // 是否正在加载
    hasMore: true,  // 是否还有更多数据
    
    // 订单状态文本
    orderStatusText: {
      0: '待支付',
      1: '待发货',
      2: '待收货',
      3: '已完成',
      4: '已取消'
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 如果有传入状态参数，切换到对应标签
    if (options.status !== undefined) {
      const status = parseInt(options.status);
      this.setData({
        currentTab: status
      });
    }
    
    // 加载订单数据
    this.loadOrderList();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.refreshOrderList();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.data.hasMore && !this.data.loading) {
      this.loadMoreOrders();
    }
  },

  /**
   * 切换标签
   */
  switchTab: function (e) {
    const index = parseInt(e.currentTarget.dataset.index);
    
    if (index === this.data.currentTab) {
      return; // 如果点击的是当前标签，不做处理
    }
    
    this.setData({
      currentTab: index,
      orders: [],
      page: 1,
      hasMore: true
    });
    
    // 加载对应状态的订单
    this.loadOrderList();
  },

  /**
   * 加载订单列表
   */
  loadOrderList: function () {
    const { currentTab, page, pageSize } = this.data;
    
    this.setData({ loading: true });
    
    // 构建查询参数
    const params = {
      page,
      pageSize
    };
    
    // 如果不是"全部"标签，添加状态过滤
    if (currentTab !== -1) {
      params.status = currentTab;
    }
    
    getOrders(params)
      .then(res => {
        if (res.code === 200) {
          const orderList = res.data.list.map(order => {
            // 计算商品总数量
            let totalQuantity = 0;
            order.orderItems.forEach(item => {
              totalQuantity += item.quantity;
            });
            
            // 格式化创建时间
            const formattedTime = formatDate(new Date(order.createTime), 'YYYY-MM-DD HH:mm');
            
            return {
              ...order,
              createTime: formattedTime,
              totalQuantity
            };
          });
          
          this.setData({
            orders: orderList,
            hasMore: orderList.length >= pageSize,
            loading: false
          });
          
          wx.stopPullDownRefresh();
        }
      })
      .catch(err => {
        console.error('获取订单列表失败', err);
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      });
  },

  /**
   * 刷新订单列表
   */
  refreshOrderList: function () {
    this.setData({
      page: 1,
      orders: [],
      hasMore: true
    });
    this.loadOrderList();
  },

  /**
   * 加载更多订单
   */
  loadMoreOrders: function () {
    const { currentTab, page, pageSize, orders } = this.data;
    
    this.setData({
      loading: true,
      page: page + 1
    });
    
    // 构建查询参数
    const params = {
      page: page + 1,
      pageSize
    };
    
    // a如果不是"全部"标签，添加状态过滤
    if (currentTab !== -1) {
      params.status = currentTab;
    }
    
    getOrders(params)
      .then(res => {
        if (res.code === 200) {
          const newOrders = res.data.list.map(order => {
            // 计算商品总数量
            let totalQuantity = 0;
            order.orderItems.forEach(item => {
              totalQuantity += item.quantity;
            });
            
            // 格式化创建时间
            const formattedTime = formatDate(new Date(order.createTime), 'YYYY-MM-DD HH:mm');
            
            return {
              ...order,
              createTime: formattedTime,
              totalQuantity
            };
          });
          
          this.setData({
            orders: [...orders, ...newOrders],
            hasMore: newOrders.length >= pageSize,
            loading: false
          });
        }
      })
      .catch(err => {
        console.error('加载更多订单失败', err);
        this.setData({
          loading: false,
          page: page // 恢复页码
        });
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        });
      });
  },

  /**
   * 跳转到订单详情
   */
  goToOrderDetail: function (e) {
    const orderId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/order/detail?id=${orderId}`
    });
  },

  /**
   * 查看订单详情
   */
  viewOrderDetail: function (e) {
    const orderId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/order/detail?id=${orderId}`
    });
  },

  /**
   * 取消订单
   */
  cancelOrder: function (e) {
    const orderId = e.currentTarget.dataset.id;
    
    wx.showModal({
      title: '提示',
      content: '确定要取消此订单吗？',
      success: (res) => {
        if (res.confirm) {
          cancelOrder(orderId)
            .then(res => {
              if (res.code === 200) {
                wx.showToast({
                  title: '订单已取消',
                  icon: 'success'
                });
                // 刷新订单列表
                this.refreshOrderList();
              } else {
                wx.showToast({
                  title: res.message || '取消失败',
                  icon: 'none'
                });
              }
            })
            .catch(err => {
              console.error('取消订单失败', err);
              wx.showToast({
                title: '取消失败，请重试',
                icon: 'none'
              });
            });
        }
      }
    });
  },

  /**
   * 支付订单
   */
  payOrder: function (e) {
    const orderId = e.currentTarget.dataset.id;
    
    wx.showLoading({ title: '获取支付参数' });
    
    getPaymentParams(orderId)
      .then(res => {
        wx.hideLoading();
        
        if (res.code === 200) {
          const payParams = res.data;
          
          // 调用微信支付
          wx.requestPayment({
            ...payParams,
            success: () => {
              wx.showToast({
                title: '支付成功',
                icon: 'success'
              });
              // 刷新订单列表
              this.refreshOrderList();
            },
            fail: (err) => {
              console.log('支付失败', err);
              if (err.errMsg !== 'requestPayment:fail cancel') {
                wx.showToast({
                  title: '支付失败，请重试',
                  icon: 'none'
                });
              }
            }
          });
        } else {
          wx.showToast({
            title: res.message || '获取支付参数失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        wx.hideLoading();
        console.error('获取支付参数失败', err);
        wx.showToast({
          title: '获取支付参数失败',
          icon: 'none'
        });
      });
  },

  /**
   * 查看物流
   */
  viewLogistics: function (e) {
    const orderId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/order/logistics?id=${orderId}`
    });
  },

  /**
   * 确认收货
   */
  confirmReceive: function (e) {
    const orderId = e.currentTarget.dataset.id;
    
    wx.showModal({
      title: '提示',
      content: '确认已收到商品吗？',
      success: (res) => {
        if (res.confirm) {
          // 调用确认收货API
          // TODO: 实现确认收货API调用
          wx.showToast({
            title: '确认收货成功',
            icon: 'success'
          });
          // 刷新订单列表
          this.refreshOrderList();
        }
      }
    });
  },

  /**
   * 再次购买
   */
  buyAgain: function (e) {
    const orderId = e.currentTarget.dataset.id;
    // TODO: 实现再次购买逻辑
    wx.showToast({
      title: '暂未实现',
      icon: 'none'
    });
  },

  /**
   * 删除订单
   */
  deleteOrder: function (e) {
    const orderId = e.currentTarget.dataset.id;
    
    wx.showModal({
      title: '提示',
      content: '确定要删除此订单吗？',
      success: (res) => {
        if (res.confirm) {
          deleteOrder(orderId)
            .then(res => {
              if (res.code === 200) {
                wx.showToast({
                  title: '删除成功',
                  icon: 'success'
                });
                // 刷新订单列表
                this.refreshOrderList();
              } else {
                wx.showToast({
                  title: res.message || '删除失败',
                  icon: 'none'
                });
              }
            })
            .catch(err => {
              console.error('删除订单失败', err);
              wx.showToast({
                title: '删除失败，请重试',
                icon: 'none'
              });
            });
        }
      }
    });
  },

  /**
   * 去购物
   */
  goShopping: function () {
    wx.switchTab({
      url: '/pages/home/index'
    });
  }
}); 